Ember.js Services হল একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা অ্যাপ্লিকেশনের শেয়ারযোগ্য এবং পুনঃব্যবহারযোগ্য লজিক এবং ডেটা পরিচালনা করতে ব্যবহৃত হয়। Services ডেটা স্টোরেজ, ইউজার অথেন্টিকেশন, শেয়ারযোগ্য স্টেট ম্যানেজমেন্ট, এবং অন্যান্য কাজের জন্য ব্যবহৃত হয় যা একাধিক কম্পোনেন্ট বা রাউট দ্বারা প্রয়োজন হতে পারে। Services সাধারণত অ্যাপ্লিকেশনটির global state সংরক্ষণ এবং শেয়ার করতে ব্যবহৃত হয়।
Ember.js Service এর গঠন
Service তৈরি করা হয় JavaScript ক্লাসের মাধ্যমে, এবং এটি সাধারণত অ্যাপ্লিকেশন স্তরে একবার ইনস্ট্যান্সিয়েট হয়, তাই এটি একাধিক কম্পোনেন্ট এবং রাউটের মধ্যে শেয়ার করা যায়।
Service তৈরি করা
Ember CLI ব্যবহার করে সহজেই Service তৈরি করা যায়:
ember generate service user-auth
এটি একটি user-auth নামের service তৈরি করবে এবং app/services/user-auth.js ফাইলে তার কার্যাবলী সংজ্ঞায়িত করবে।
Service Example
// app/services/user-auth.js
import Service from '@ember/service';
export default class UserAuthService extends Service {
isAuthenticated = false; // স্টেট যা ইউজারের অথেন্টিকেশন চেক করবে
login() {
this.set('isAuthenticated', true);
console.log('User logged in');
}
logout() {
this.set('isAuthenticated', false);
console.log('User logged out');
}
}
এখানে:
- isAuthenticated: এটি ইউজারের লগইন অবস্থাকে ট্র্যাক করে।
- login() এবং logout(): এগুলি ইউজারের লগইন এবং লগআউটের জন্য ব্যবহৃত অ্যাকশন।
Service ফাইলের স্ট্রাকচার
// app/services/user-auth.js
import Service from '@ember/service';
export default class UserAuthService extends Service {
// এখানে বিভিন্ন মেথড এবং প্রপার্টি থাকতে পারে
}
Service ব্যবহার করা
Service ব্যবহার করতে হলে, আপনি অ্যাপ্লিকেশনের যে অংশে এটি প্রয়োজন সেখানে এটি ইনজেক্ট করতে পারেন। সাধারণত, এটি Controller, Route, অথবা Component-এ ইনজেক্ট করা হয়।
Service ইনজেক্ট করা
- Controller-এ Service ইনজেক্ট করা:
// app/controllers/application.js
import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
export default class ApplicationController extends Controller {
@service userAuth; // user-auth service ইনজেক্ট করা
login() {
this.userAuth.login(); // service এর মেথড কল করা
}
}
- Component-এ Service ইনজেক্ট করা:
// app/components/user-login.js
import Component from '@ember/component';
import { inject as service } from '@ember/service';
export default class UserLoginComponent extends Component {
@service userAuth;
actions: {
login() {
this.userAuth.login();
},
logout() {
this.userAuth.logout();
}
}
}
এখানে, @service ডেকোরেটর ব্যবহার করে userAuth service ইনজেক্ট করা হয়েছে এবং তার মেথডগুলি ব্যবহার করা হয়েছে।
- Route-এ Service ইনজেক্ট করা:
// app/routes/application.js
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
export default class ApplicationRoute extends Route {
@service userAuth;
model() {
return {
isAuthenticated: this.userAuth.isAuthenticated,
};
}
}
এখানে userAuth service এর isAuthenticated স্টেট model() ফাংশনের মাধ্যমে রাউটে প্রেরণ করা হয়েছে।
Service এর সুবিধা
- Shared State: Service গুলো একাধিক কম্পোনেন্ট এবং রাউটের মধ্যে শেয়ার করা যায়, যা একই ডেটা একাধিক জায়গায় ব্যবহারের সুবিধা দেয়।
- Global Scope: Services অ্যাপ্লিকেশনের জন্য একটি গ্লোবাল স্কোপে কাজ করে, যার মানে এটি একবার তৈরি হলে যেকোনো জায়গায় ব্যবহৃত হতে পারে।
- Reusable Logic: একাধিক কম্পোনেন্টে বা রাউটে একই লজিক ব্যবহার করার সুবিধা দেয়। উদাহরণস্বরূপ, ইউজার অথেন্টিকেশন লজিক একবার একটি Service-এ রাখা যেতে পারে এবং তা অ্যাপ্লিকেশনের সব জায়গায় ব্যবহার করা যেতে পারে।
Service Lifecycle
- Singleton Pattern: Ember Services সাধারণত একবার তৈরি হয় এবং পুরো অ্যাপ্লিকেশন জুড়ে একক ইনস্ট্যান্স হিসেবে ব্যবহৃত হয়।
- Injected into components, routes, and controllers: একটি Service একাধিক জায়গায় ইনজেক্ট করা যেতে পারে এবং একই ইনস্ট্যান্স ব্যবহার করা হয়।
- State Persistence: Services সাধারণত অ্যাপ্লিকেশনের চলমান অবস্থায় স্টেট ধরে রাখে। একবার ইনস্ট্যান্স তৈরি হলে, সেটি চলতি রাউট বা কম্পোনেন্টের ভিতর বা বাইরে যেকোনো সময় ব্যবহৃত হতে পারে।
Service এবং Dependency Injection (DI)
Ember.js-এ Dependency Injection (DI) ব্যবহৃত হয়, যা সিস্টেমের মধ্যে নির্দিষ্ট একটি কম্পোনেন্ট বা সেবা প্রদান করা হয়। DI ব্যবহারের মাধ্যমে আপনি একাধিক জায়গায় একই সেবা/কম্পোনেন্ট ব্যবহার করতে পারেন এবং এটি প্রজেক্টের রক্ষণাবেক্ষণ সহজ করে তোলে। Ember CLI এর মাধ্যমে Service ইনজেক্ট করা হয় DI সিস্টেমের মাধ্যমে।
Service-এর অন্যান্য ফিচার
- অ্যাপ্লিকেশন স্টেট:
- আপনি একাধিক কম্পোনেন্ট বা রাউটের মধ্যে শেয়ার করার জন্য অ্যাপ্লিকেশন স্টেট রাখতে পারবেন।
- Lazy Loading:
- Ember.js Services সাধারণত lazy-loaded হয়, অর্থাৎ সেগুলি যখন প্রয়োজন হয় তখনই ইনস্ট্যান্সিয়েট হয়। এটি অ্যাপ্লিকেশনের কর্মক্ষমতা বৃদ্ধি করতে সহায়ক।
Ember.js Services হল একটি অত্যন্ত শক্তিশালী ফিচার যা অ্যাপ্লিকেশনের শেয়ারযোগ্য লজিক এবং ডেটা পরিচালনা করতে ব্যবহৃত হয়। এটি অ্যাপ্লিকেশনের মধ্যে পুনঃব্যবহারযোগ্য এবং এককভাবে পরিচালিত কোড লেখা সহজ করে তোলে। একবার তৈরি হলে, Services বিভিন্ন কম্পোনেন্ট এবং রাউটের মধ্যে শেয়ার করা যায় এবং অ্যাপ্লিকেশনের জটিল লজিক সুশৃঙ্খলভাবে রাখা যায়।
Read more